export default {
  /**
   * 页面跳转
   */
  go (uri) {
    window.location.href = '#/' + uri
  },

  /**
   * 拨打电话
   */
  tel (number) {
    window.location.href = 'tel://' + number
    console.log(number)
  },

  //success/warn/cancel/text
  showToast (message, type='text') {
    this.$vux.toast.show({
      text: message,
      type: type
    })
  },

  /**
   * 显示加载
   */
  showLoading () {
  },

  /**
   * 显示加载
   */
  hideLoading () {
  },

  /**
   * 验证手机号npm sea
   * @return boolean
   */
  isMobile (mobile) {
    var reg = /1[34578]{1}\d{9}$/
    if (!reg.test(mobile)) {
      return false
    }

    return true
  },

  /**
   * 判断用户是否已登录
   */
  isLogin () {
    let token = this.getLocal('token')
    return token
  },
  setLocal (name, value) {
    name = 'aspros_growhappy_' + name
    if (typeof (value) === 'object') {
      value = JSON.stringify(value)
    }
    window.localStorage.setItem(name, value)
  },
  getLocal (name) {
    name = 'aspros_growhappy_' + name
    let value = window.localStorage.getItem(name)
    if (value) {
      if (this.isJSON(value)) {
        let valueJson = JSON.parse(value)
        if (typeof valueJson === 'object') {
          return valueJson
        }
      }
    }
    return value
  },
  rmLocal (name) {
    name = 'aspros_growhappy_' + name
    window.localStorage.removeItem(name)
  },

  /**
   * json转json字符串
   */
  jsonToStr (string) {
    return JSON.stringify(string)
  },

  /**
   * 字符串转JSON
   */
  strToJson (string) {
    return JSON.parse(string)
  },

  /**
   * 判断是否为json
   */
  isJSON (str) {
    str = str.replace(/\s/g, '').replace(/\n|\r/, '')

    if (/^\{(.*?)\}$/.test(str)) {
      return /"(.*?)":(.*?)/g.test(str)
    }
    if (/^\[(.*?)\]$/.test(str)) {
      return str.replace(/^\[/, '')
        .replace(/\]$/, '')
        .replace(/},{/g, '}\n{')
        .split(/\n/)
        .map(function (s) { return this.isJSON(s) })
        .reduce(function (prev, curr) { return !!curr })
    }

    return false
  },

  /**
   * 去除字符串两端空格
   */
  delTrim(str){
    var newstr = str.replace(/^[\s\n\t]+/g, "");
    return newstr.replace(/[\s\n\t]+$/g, "");
  },

  /**
   * 模拟post表单提交
   * @param   uri    提交地址
   * @param  object params 提交的参数
   */
  postSubmit (uri, params) {
    var temp = document.createElement('form')
    temp.action = uri
    temp.method = 'post'
    temp.style.display = 'none'
    for (var x in params) {
      var opt = document.createElement('textarea')
      opt.name = x
      opt.value = params[x]
      temp.appendChild(opt)
    }
    document.body.appendChild(temp)
    temp.submit()
    return temp
  },

  /**
   * 获取当前使用的客户端类型
   */
  getClientType () {
    var ua = window.navigator.userAgent.toLowerCase()

    if (ua.indexOf('micromessenger') > -1) {
      // 微信
      return 'wechat'
    } else if (ua.indexOf('alipayclient') > -1) {
      // 支付
      return 'alipay'
    } else {
      return 'web'
    }
  },
  toDecimal (x) {
    var f = parseFloat(x);
    if (isNaN(f)) {
      return
    }
    f = Math.round(f * 100) / 100
    return f.toFixed(2)
  },
  getWeek (x) {
    var week = ['日', '一', '二', '三', '四', '五', '六']
    return week[x]
  },
  /**
   * js版php时间格式化
   * @param  string format    'Y-m-d H:i:s'
   * @param  int timestamp unix时间戳
   * @return string
   */
  formatTime (format, timestamp) {
    var jsdate = new Date(timestamp)
    var pad = function (n, c) {
      if ((n = n + '').length < c) {
        return new Array(++c - n.length).join('0') + n
      } else {
        return n
      }
    }
    var txtWeekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
    var txtOrdin = { 1: 'st', 2: 'nd', 3: 'rd', 21: 'st', 22: 'nd', 23: 'rd', 31: 'st' }
    var txtMonths = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
    var f = {
      // Day
      d: function () {
        return pad(f.j(), 2)
      },
      D: function () {
        return f.l().substr(0, 3)
      },
      j: function () {
        return jsdate.getDate()
      },
      l: function () {
        return txtWeekdays[f.w()]
      },
      N: function () {
        return f.w() + 1
      },
      S: function () {
        return txtOrdin[f.j()] ? txtOrdin[f.j()] : 'th'
      },
      w: function () {
        return jsdate.getDay()
      },
      z: function () {
        return (jsdate - new Date(jsdate.getFullYear() + '/1/1')) / 864e5 >> 0
      },
      // Week
      W: function () {
        var a = f.z()
        var b = 364 + f.L() - a
        var nd2
        var nd = (new Date(jsdate.getFullYear() + '/1/1').getDay() || 7) - 1
        if (b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
          return 1
        } else {
          if (a <= 2 && nd >= 4 && a >= (6 - nd)) {
            nd2 = new Date(jsdate.getFullYear() - 1 + '/12/31')
            return new Date('W', Math.round(nd2.getTime() / 1000))
          } else {
            return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0)
          }
        }
      },
      // Month
      F: function () {
        return txtMonths[f.n()]
      },
      m: function () {
        return pad(f.n(), 2)
      },
      M: function () {
        return f.F().substr(0, 3)
      },
      n: function () {
        return jsdate.getMonth() + 1
      },
      t: function () {
        var n
        if ((n = jsdate.getMonth() + 1) === 2) {
          return 28 + f.L()
        } else {
          if (n & 1 && n < 8 || !(n & 1) && n > 7) {
            return 31
          } else {
            return 30
          }
        }
      },
      // Year
      L: function () {
        var y = f.Y()
        return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
      },
      // o not supported yet
      Y: function () {
        return jsdate.getFullYear()
      },
      y: function () {
        return (jsdate.getFullYear() + '').slice(2)
      },
      // Time
      a: function () {
        return jsdate.getHours() > 11 ? 'pm' : 'am'
      },
      A: function () {
        return f.a().toUpperCase()
      },
      B: function () {
        // peter paul koch:
        var off = (jsdate.getTimezoneOffset() + 60) * 60
        var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off
        var beat = Math.floor(theSeconds / 86.4)
        if (beat > 1000) beat -= 1000
        if (beat < 0) beat += 1000
        if ((String(beat)).length === 1) beat = '00' + beat
        if ((String(beat)).length === 2) beat = '0' + beat
        return beat
      },
      g: function () {
        return jsdate.getHours() % 12 || 12
      },
      G: function () {
        return jsdate.getHours()
      },
      h: function () {
        return pad(f.g(), 2)
      },
      H: function () {
        return pad(jsdate.getHours(), 2)
      },
      i: function () {
        return pad(jsdate.getMinutes(), 2)
      },
      s: function () {
        return pad(jsdate.getSeconds(), 2)
      },
      // u not supported yet
      // Timezone
      // e not supported yet
      // I not supported yet
      O: function () {
        var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4)
        if (jsdate.getTimezoneOffset() > 0) {
          t = '-' + t
        } else {
          t = '+' + t
        }
        return t
      },
      P: function () {
        var O = f.O()
        return (O.substr(0, 3) + ':' + O.substr(3, 2))
      },
      // T not supported yet
      // Z not supported yet
      // Full Date/Time
      c: function () {
        return f.Y() + '-' + f.m() + '-' + f.d() + 'T' + f.h() + ':' + f.i() + ':' + f.s() + f.P()
      },
      // r not supported yet
      U: function () {
        return Math.round(jsdate.getTime() / 1000)
      }
    }
    return format.replace(/[\\]?([a-zA-Z])/g, function (t, s) {
      var ret
      if (t !== s) {
        // escaped
        ret = s
      } else if (f[s]) {
        // a date function exists
        ret = f[s]()
      } else {
        // nothing special
        ret = s
      }
      return ret
    })
  },

  /**
   * 是否在数组中
   * @param  array arr
   * @param  string obj
   */
  inArray (arr, obj) {
    var i = arr.length
    while (i--) {
      if (arr[i] === obj) {
        return true
      }
    }
    return false
  },

  /**
   * 打开APP
   * @param  string url APP唤起url
   */
  openApp (url) {
    var customClickEvent = function () {
      var clickEvt
      if (window.CustomEvent) {
        clickEvt = new window.CustomEvent('click', {
          canBubble: true,
          cancelable: true
        })
      } else {
        clickEvt = document.createEvent('Event')
        clickEvt.initEvent('click', true, true)
      }

      return clickEvt
    }

    var ua = navigator.userAgent.toLowerCase()

    if (ua.indexOf('qq/') > -1 || (ua.indexOf('safari') > -1 && ua.indexOf('os 9_') > -1) || (ua.indexOf('safari') > -1 && ua.indexOf('os 10_') > -1)) {
      var openSchemeLink = document.getElementById('openSchemeLink')
      if (!openSchemeLink) {
        openSchemeLink = document.createElement('a')
        openSchemeLink.id = 'openSchemeLink'
        openSchemeLink.style.display = 'none'
        document.body.appendChild(openSchemeLink)
      }
      openSchemeLink.href = url
      // trigger click
      openSchemeLink.dispatchEvent(customClickEvent())
    } else {
      var ifr = document.createElement('iframe')
      ifr.src = url
      ifr.style.display = 'none'
      document.body.appendChild(ifr)
    }
  }
}
